0 JBC
↳1 JBCToGraph (⇒, 6760 ms)
↳2 JBCTerminationGraph
↳3 TerminationGraphToSCCProof (⇒, 0 ms)
↳4 AND
↳5 JBCTerminationSCC
↳6 SCCToIDPv1Proof (⇒, 90 ms)
↳7 IDP
↳8 IDPNonInfProof (⇒, 120 ms)
↳9 IDP
↳10 IDependencyGraphProof (⇔, 0 ms)
↳11 TRUE
↳12 JBCTerminationSCC
↳13 SCCToIDPv1Proof (⇒, 170 ms)
↳14 IDP
↳15 IDPNonInfProof (⇒, 70 ms)
↳16 AND
↳17 IDP
↳18 IDependencyGraphProof (⇔, 0 ms)
↳19 TRUE
↳20 IDP
↳21 IDependencyGraphProof (⇔, 0 ms)
↳22 TRUE
↳23 JBCTerminationSCC
↳24 SCCToIDPv1Proof (⇒, 170 ms)
↳25 IDP
↳26 IDPNonInfProof (⇒, 50 ms)
↳27 AND
↳28 IDP
↳29 IDependencyGraphProof (⇔, 0 ms)
↳30 TRUE
↳31 IDP
↳32 IDependencyGraphProof (⇔, 0 ms)
↳33 TRUE
package example_1;
public class A {
int incr(int i) {
return i=i+1;
}
}
package example_1;
public class B extends A {
int incr(int i) {
return i = i+2;
}
}
package example_1;
public class C extends B {
int incr(int i) {
return i=i+3;
}
}
package example_1;
public class Test {
public int add(int n,A o){
int res=0;
int i=0;
while (i<=n){
res=res+i;
i=o.incr(i);
}
return res;
}
public static void main(String[] args) {
int test = 1000;
Test testClass = new Test();
A a = new A();
int result1 = testClass.add(test,a);
a = new B();
int result2 = testClass.add(test,a);
a = new C();
int result3 = testClass.add(test,a);
// System.out.println("Result: "+result1 + result2 + result3);
}
}
Generated 20 rules for P and 0 rules for R.
P rules:
7022_0_add_Load(EOS(STATIC_7022), matching1, matching2, i344, i344) → 7023_0_add_GT(EOS(STATIC_7023), 1000, 1000, i344, i344, 1000) | &&(=(matching1, 1000), =(matching2, 1000))
7023_0_add_GT(EOS(STATIC_7023), matching1, matching2, i350, i350, matching3) → 7024_0_add_GT(EOS(STATIC_7024), 1000, 1000, i350, i350, 1000) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
7024_0_add_GT(EOS(STATIC_7024), matching1, matching2, i350, i350, matching3) → 7027_0_add_Load(EOS(STATIC_7027), 1000, 1000, i350) | &&(&&(&&(<=(i350, 1000), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000))
7027_0_add_Load(EOS(STATIC_7027), matching1, matching2, i350) → 7029_0_add_Load(EOS(STATIC_7029), 1000, 1000, i350) | &&(=(matching1, 1000), =(matching2, 1000))
7029_0_add_Load(EOS(STATIC_7029), matching1, matching2, i350) → 7031_0_add_IntArithmetic(EOS(STATIC_7031), 1000, 1000, i350, i350) | &&(=(matching1, 1000), =(matching2, 1000))
7031_0_add_IntArithmetic(EOS(STATIC_7031), matching1, matching2, i350, i350) → 7034_0_add_Store(EOS(STATIC_7034), 1000, 1000, i350) | &&(&&(>=(i350, 0), =(matching1, 1000)), =(matching2, 1000))
7034_0_add_Store(EOS(STATIC_7034), matching1, matching2, i350) → 7036_0_add_Load(EOS(STATIC_7036), 1000, 1000, i350) | &&(=(matching1, 1000), =(matching2, 1000))
7036_0_add_Load(EOS(STATIC_7036), matching1, matching2, i350) → 7038_0_add_Load(EOS(STATIC_7038), 1000, 1000, i350) | &&(=(matching1, 1000), =(matching2, 1000))
7038_0_add_Load(EOS(STATIC_7038), matching1, matching2, i350) → 7040_0_add_InvokeMethod(EOS(STATIC_7040), 1000, 1000, i350) | &&(=(matching1, 1000), =(matching2, 1000))
7040_0_add_InvokeMethod(EOS(STATIC_7040), matching1, matching2, i350) → 7041_0_incr_Load(EOS(STATIC_7041), 1000, 1000, i350, i350) | &&(=(matching1, 1000), =(matching2, 1000))
7041_0_incr_Load(EOS(STATIC_7041), matching1, matching2, i350, i350) → 7042_0_incr_ConstantStackPush(EOS(STATIC_7042), 1000, 1000, i350, i350) | &&(=(matching1, 1000), =(matching2, 1000))
7042_0_incr_ConstantStackPush(EOS(STATIC_7042), matching1, matching2, i350, i350) → 7043_0_incr_IntArithmetic(EOS(STATIC_7043), 1000, 1000, i350, i350, 3) | &&(=(matching1, 1000), =(matching2, 1000))
7043_0_incr_IntArithmetic(EOS(STATIC_7043), matching1, matching2, i350, i350, matching3) → 7044_0_incr_Duplicate(EOS(STATIC_7044), 1000, 1000, i350, +(i350, 3)) | &&(&&(&&(>=(i350, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 3))
7044_0_incr_Duplicate(EOS(STATIC_7044), matching1, matching2, i350, i357) → 7045_0_incr_Store(EOS(STATIC_7045), 1000, 1000, i350, i357, i357) | &&(=(matching1, 1000), =(matching2, 1000))
7045_0_incr_Store(EOS(STATIC_7045), matching1, matching2, i350, i357, i357) → 7046_0_incr_Return(EOS(STATIC_7046), 1000, 1000, i350, i357) | &&(=(matching1, 1000), =(matching2, 1000))
7046_0_incr_Return(EOS(STATIC_7046), matching1, matching2, i350, i357) → 7048_0_add_Store(EOS(STATIC_7048), 1000, 1000, i357) | &&(=(matching1, 1000), =(matching2, 1000))
7048_0_add_Store(EOS(STATIC_7048), matching1, matching2, i357) → 7049_0_add_JMP(EOS(STATIC_7049), 1000, 1000, i357) | &&(=(matching1, 1000), =(matching2, 1000))
7049_0_add_JMP(EOS(STATIC_7049), matching1, matching2, i357) → 7051_0_add_Load(EOS(STATIC_7051), 1000, 1000, i357) | &&(=(matching1, 1000), =(matching2, 1000))
7051_0_add_Load(EOS(STATIC_7051), matching1, matching2, i357) → 7020_0_add_Load(EOS(STATIC_7020), 1000, 1000, i357) | &&(=(matching1, 1000), =(matching2, 1000))
7020_0_add_Load(EOS(STATIC_7020), matching1, matching2, i344) → 7022_0_add_Load(EOS(STATIC_7022), 1000, 1000, i344, i344) | &&(=(matching1, 1000), =(matching2, 1000))
R rules:
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
7022_0_add_Load(EOS(STATIC_7022), 1000, 1000, x2, x2) → 7022_0_add_Load(EOS(STATIC_7022), 1000, 1000, +(x2, 3), +(x2, 3)) | &&(>(+(x2, 1), 0), <=(x2, 1000))
R rules:
Filtered ground terms:
7022_0_add_Load(x1, x2, x3, x4, x5) → 7022_0_add_Load(x4, x5)
EOS(x1) → EOS
Cond_7022_0_add_Load(x1, x2, x3, x4, x5, x6) → Cond_7022_0_add_Load(x1, x5, x6)
Filtered duplicate args:
7022_0_add_Load(x1, x2) → 7022_0_add_Load(x2)
Cond_7022_0_add_Load(x1, x2, x3) → Cond_7022_0_add_Load(x1, x3)
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
7022_0_add_Load(x2) → 7022_0_add_Load(+(x2, 3)) | &&(>(x2, -1), <=(x2, 1000))
R rules:
Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.
P rules:
7022_0_ADD_LOAD(x2) → COND_7022_0_ADD_LOAD(&&(>(x2, -1), <=(x2, 1000)), x2)
COND_7022_0_ADD_LOAD(TRUE, x2) → 7022_0_ADD_LOAD(+(x2, 3))
R rules:
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Boolean, Integer
(0) -> (1), if (x2[0] > -1 && x2[0] <= 1000 ∧x2[0] →* x2[1])
(1) -> (0), if (x2[1] + 3 →* x2[0])
(1) (&&(>(x2[0], -1), <=(x2[0], 1000))=TRUE∧x2[0]=x2[1] ⇒ 7022_0_ADD_LOAD(x2[0])≥NonInfC∧7022_0_ADD_LOAD(x2[0])≥COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])∧(UIncreasing(COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥))
(2) (>(x2[0], -1)=TRUE∧<=(x2[0], 1000)=TRUE ⇒ 7022_0_ADD_LOAD(x2[0])≥NonInfC∧7022_0_ADD_LOAD(x2[0])≥COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])∧(UIncreasing(COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥))
(3) (x2[0] ≥ 0∧[1000] + [-1]x2[0] ≥ 0 ⇒ (UIncreasing(COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x2[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)
(4) (x2[0] ≥ 0∧[1000] + [-1]x2[0] ≥ 0 ⇒ (UIncreasing(COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x2[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)
(5) (x2[0] ≥ 0∧[1000] + [-1]x2[0] ≥ 0 ⇒ (UIncreasing(COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])), ≥)∧[bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x2[0] ≥ 0∧[2 + (-1)bso_11] ≥ 0)
(6) (COND_7022_0_ADD_LOAD(TRUE, x2[1])≥NonInfC∧COND_7022_0_ADD_LOAD(TRUE, x2[1])≥7022_0_ADD_LOAD(+(x2[1], 3))∧(UIncreasing(7022_0_ADD_LOAD(+(x2[1], 3))), ≥))
(7) ((UIncreasing(7022_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(8) ((UIncreasing(7022_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(9) ((UIncreasing(7022_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(10) ((UIncreasing(7022_0_ADD_LOAD(+(x2[1], 3))), ≥)∧[bni_12] = 0∧0 = 0∧[1 + (-1)bso_13] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = 0
POL(7022_0_ADD_LOAD(x1)) = [1] + [-1]x1
POL(COND_7022_0_ADD_LOAD(x1, x2)) = [-1] + [-1]x2
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(-1) = [-1]
POL(<=(x1, x2)) = [-1]
POL(1000) = [1000]
POL(+(x1, x2)) = x1 + x2
POL(3) = [3]
7022_0_ADD_LOAD(x2[0]) → COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])
COND_7022_0_ADD_LOAD(TRUE, x2[1]) → 7022_0_ADD_LOAD(+(x2[1], 3))
7022_0_ADD_LOAD(x2[0]) → COND_7022_0_ADD_LOAD(&&(>(x2[0], -1), <=(x2[0], 1000)), x2[0])
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Integer
Generated 20 rules for P and 0 rules for R.
P rules:
4692_0_add_Load(EOS(STATIC_4692), matching1, matching2, matching3, i115, i115) → 4694_0_add_GT(EOS(STATIC_4694), 1000, 1000, 1000, i115, i115, 1000) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4694_0_add_GT(EOS(STATIC_4694), matching1, matching2, matching3, i121, i121, matching4) → 4695_0_add_GT(EOS(STATIC_4695), 1000, 1000, 1000, i121, i121, 1000) | &&(&&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
4695_0_add_GT(EOS(STATIC_4695), matching1, matching2, matching3, i121, i121, matching4) → 4697_0_add_Load(EOS(STATIC_4697), 1000, 1000, 1000, i121) | &&(&&(&&(&&(<=(i121, 1000), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
4697_0_add_Load(EOS(STATIC_4697), matching1, matching2, matching3, i121) → 4700_0_add_Load(EOS(STATIC_4700), 1000, 1000, 1000, i121) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4700_0_add_Load(EOS(STATIC_4700), matching1, matching2, matching3, i121) → 4703_0_add_IntArithmetic(EOS(STATIC_4703), 1000, 1000, 1000, i121, i121) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4703_0_add_IntArithmetic(EOS(STATIC_4703), matching1, matching2, matching3, i121, i121) → 4705_0_add_Store(EOS(STATIC_4705), 1000, 1000, 1000, i121) | &&(&&(&&(>=(i121, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000))
4705_0_add_Store(EOS(STATIC_4705), matching1, matching2, matching3, i121) → 4708_0_add_Load(EOS(STATIC_4708), 1000, 1000, 1000, i121) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4708_0_add_Load(EOS(STATIC_4708), matching1, matching2, matching3, i121) → 4710_0_add_Load(EOS(STATIC_4710), 1000, 1000, 1000, i121) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4710_0_add_Load(EOS(STATIC_4710), matching1, matching2, matching3, i121) → 4712_0_add_InvokeMethod(EOS(STATIC_4712), 1000, 1000, 1000, i121) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4712_0_add_InvokeMethod(EOS(STATIC_4712), matching1, matching2, matching3, i121) → 4715_0_incr_Load(EOS(STATIC_4715), 1000, 1000, 1000, i121, i121) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4715_0_incr_Load(EOS(STATIC_4715), matching1, matching2, matching3, i121, i121) → 4717_0_incr_ConstantStackPush(EOS(STATIC_4717), 1000, 1000, 1000, i121, i121) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4717_0_incr_ConstantStackPush(EOS(STATIC_4717), matching1, matching2, matching3, i121, i121) → 4720_0_incr_IntArithmetic(EOS(STATIC_4720), 1000, 1000, 1000, i121, i121, 2) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4720_0_incr_IntArithmetic(EOS(STATIC_4720), matching1, matching2, matching3, i121, i121, matching4) → 4722_0_incr_Duplicate(EOS(STATIC_4722), 1000, 1000, 1000, i121, +(i121, 2)) | &&(&&(&&(&&(>=(i121, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 2))
4722_0_incr_Duplicate(EOS(STATIC_4722), matching1, matching2, matching3, i121, i126) → 4723_0_incr_Store(EOS(STATIC_4723), 1000, 1000, 1000, i121, i126, i126) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4723_0_incr_Store(EOS(STATIC_4723), matching1, matching2, matching3, i121, i126, i126) → 4726_0_incr_Return(EOS(STATIC_4726), 1000, 1000, 1000, i121, i126) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4726_0_incr_Return(EOS(STATIC_4726), matching1, matching2, matching3, i121, i126) → 4728_0_add_Store(EOS(STATIC_4728), 1000, 1000, 1000, i126) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4728_0_add_Store(EOS(STATIC_4728), matching1, matching2, matching3, i126) → 4730_0_add_JMP(EOS(STATIC_4730), 1000, 1000, 1000, i126) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4730_0_add_JMP(EOS(STATIC_4730), matching1, matching2, matching3, i126) → 4734_0_add_Load(EOS(STATIC_4734), 1000, 1000, 1000, i126) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4734_0_add_Load(EOS(STATIC_4734), matching1, matching2, matching3, i126) → 4691_0_add_Load(EOS(STATIC_4691), 1000, 1000, 1000, i126) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
4691_0_add_Load(EOS(STATIC_4691), matching1, matching2, matching3, i115) → 4692_0_add_Load(EOS(STATIC_4692), 1000, 1000, 1000, i115, i115) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
R rules:
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
4692_0_add_Load(EOS(STATIC_4692), 1000, 1000, 1000, x3, x3) → 4692_0_add_Load(EOS(STATIC_4692), 1000, 1000, 1000, +(x3, 2), +(x3, 2)) | &&(>(+(x3, 1), 0), <=(x3, 1000))
R rules:
Filtered ground terms:
4692_0_add_Load(x1, x2, x3, x4, x5, x6) → 4692_0_add_Load(x5, x6)
EOS(x1) → EOS
Cond_4692_0_add_Load(x1, x2, x3, x4, x5, x6, x7) → Cond_4692_0_add_Load(x1, x6, x7)
Filtered duplicate args:
4692_0_add_Load(x1, x2) → 4692_0_add_Load(x2)
Cond_4692_0_add_Load(x1, x2, x3) → Cond_4692_0_add_Load(x1, x3)
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
4692_0_add_Load(x3) → 4692_0_add_Load(+(x3, 2)) | &&(>(x3, -1), <=(x3, 1000))
R rules:
Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.
P rules:
4692_0_ADD_LOAD(x3) → COND_4692_0_ADD_LOAD(&&(>(x3, -1), <=(x3, 1000)), x3)
COND_4692_0_ADD_LOAD(TRUE, x3) → 4692_0_ADD_LOAD(+(x3, 2))
R rules:
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Boolean, Integer
(0) -> (1), if (x3[0] > -1 && x3[0] <= 1000 ∧x3[0] →* x3[1])
(1) -> (0), if (x3[1] + 2 →* x3[0])
(1) (&&(>(x3[0], -1), <=(x3[0], 1000))=TRUE∧x3[0]=x3[1] ⇒ 4692_0_ADD_LOAD(x3[0])≥NonInfC∧4692_0_ADD_LOAD(x3[0])≥COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(2) (>(x3[0], -1)=TRUE∧<=(x3[0], 1000)=TRUE ⇒ 4692_0_ADD_LOAD(x3[0])≥NonInfC∧4692_0_ADD_LOAD(x3[0])≥COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(3) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(4) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(5) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(6) (COND_4692_0_ADD_LOAD(TRUE, x3[1])≥NonInfC∧COND_4692_0_ADD_LOAD(TRUE, x3[1])≥4692_0_ADD_LOAD(+(x3[1], 2))∧(UIncreasing(4692_0_ADD_LOAD(+(x3[1], 2))), ≥))
(7) ((UIncreasing(4692_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)
(8) ((UIncreasing(4692_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)
(9) ((UIncreasing(4692_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧[2 + (-1)bso_13] ≥ 0)
(10) ((UIncreasing(4692_0_ADD_LOAD(+(x3[1], 2))), ≥)∧[bni_12] = 0∧0 = 0∧[2 + (-1)bso_13] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = 0
POL(4692_0_ADD_LOAD(x1)) = [-1] + [-1]x1
POL(COND_4692_0_ADD_LOAD(x1, x2)) = [-1] + [-1]x2
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(-1) = [-1]
POL(<=(x1, x2)) = [-1]
POL(1000) = [1000]
POL(+(x1, x2)) = x1 + x2
POL(2) = [2]
COND_4692_0_ADD_LOAD(TRUE, x3[1]) → 4692_0_ADD_LOAD(+(x3[1], 2))
4692_0_ADD_LOAD(x3[0]) → COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])
4692_0_ADD_LOAD(x3[0]) → COND_4692_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Boolean, Integer
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Integer
Generated 20 rules for P and 0 rules for R.
P rules:
334_0_add_Load(EOS(STATIC_334), matching1, matching2, matching3, i18, i18) → 340_0_add_GT(EOS(STATIC_340), 1000, 1000, 1000, i18, i18, 1000) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
340_0_add_GT(EOS(STATIC_340), matching1, matching2, matching3, i22, i22, matching4) → 342_0_add_GT(EOS(STATIC_342), 1000, 1000, 1000, i22, i22, 1000) | &&(&&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
342_0_add_GT(EOS(STATIC_342), matching1, matching2, matching3, i22, i22, matching4) → 346_0_add_Load(EOS(STATIC_346), 1000, 1000, 1000, i22) | &&(&&(&&(&&(<=(i22, 1000), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1000))
346_0_add_Load(EOS(STATIC_346), matching1, matching2, matching3, i22) → 350_0_add_Load(EOS(STATIC_350), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
350_0_add_Load(EOS(STATIC_350), matching1, matching2, matching3, i22) → 354_0_add_IntArithmetic(EOS(STATIC_354), 1000, 1000, 1000, i22, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
354_0_add_IntArithmetic(EOS(STATIC_354), matching1, matching2, matching3, i22, i22) → 358_0_add_Store(EOS(STATIC_358), 1000, 1000, 1000, i22) | &&(&&(&&(>=(i22, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000))
358_0_add_Store(EOS(STATIC_358), matching1, matching2, matching3, i22) → 363_0_add_Load(EOS(STATIC_363), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
363_0_add_Load(EOS(STATIC_363), matching1, matching2, matching3, i22) → 367_0_add_Load(EOS(STATIC_367), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
367_0_add_Load(EOS(STATIC_367), matching1, matching2, matching3, i22) → 372_0_add_InvokeMethod(EOS(STATIC_372), 1000, 1000, 1000, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
372_0_add_InvokeMethod(EOS(STATIC_372), matching1, matching2, matching3, i22) → 376_0_incr_Load(EOS(STATIC_376), 1000, 1000, 1000, i22, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
376_0_incr_Load(EOS(STATIC_376), matching1, matching2, matching3, i22, i22) → 381_0_incr_ConstantStackPush(EOS(STATIC_381), 1000, 1000, 1000, i22, i22) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
381_0_incr_ConstantStackPush(EOS(STATIC_381), matching1, matching2, matching3, i22, i22) → 385_0_incr_IntArithmetic(EOS(STATIC_385), 1000, 1000, 1000, i22, i22, 1) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
385_0_incr_IntArithmetic(EOS(STATIC_385), matching1, matching2, matching3, i22, i22, matching4) → 389_0_incr_Duplicate(EOS(STATIC_389), 1000, 1000, 1000, i22, +(i22, 1)) | &&(&&(&&(&&(>=(i22, 0), =(matching1, 1000)), =(matching2, 1000)), =(matching3, 1000)), =(matching4, 1))
389_0_incr_Duplicate(EOS(STATIC_389), matching1, matching2, matching3, i22, i24) → 391_0_incr_Store(EOS(STATIC_391), 1000, 1000, 1000, i22, i24, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
391_0_incr_Store(EOS(STATIC_391), matching1, matching2, matching3, i22, i24, i24) → 396_0_incr_Return(EOS(STATIC_396), 1000, 1000, 1000, i22, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
396_0_incr_Return(EOS(STATIC_396), matching1, matching2, matching3, i22, i24) → 401_0_add_Store(EOS(STATIC_401), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
401_0_add_Store(EOS(STATIC_401), matching1, matching2, matching3, i24) → 406_0_add_JMP(EOS(STATIC_406), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
406_0_add_JMP(EOS(STATIC_406), matching1, matching2, matching3, i24) → 425_0_add_Load(EOS(STATIC_425), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
425_0_add_Load(EOS(STATIC_425), matching1, matching2, matching3, i24) → 331_0_add_Load(EOS(STATIC_331), 1000, 1000, 1000, i24) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
331_0_add_Load(EOS(STATIC_331), matching1, matching2, matching3, i18) → 334_0_add_Load(EOS(STATIC_334), 1000, 1000, 1000, i18, i18) | &&(&&(=(matching1, 1000), =(matching2, 1000)), =(matching3, 1000))
R rules:
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
334_0_add_Load(EOS(STATIC_334), 1000, 1000, 1000, x3, x3) → 334_0_add_Load(EOS(STATIC_334), 1000, 1000, 1000, +(x3, 1), +(x3, 1)) | &&(>(+(x3, 1), 0), <=(x3, 1000))
R rules:
Filtered ground terms:
334_0_add_Load(x1, x2, x3, x4, x5, x6) → 334_0_add_Load(x5, x6)
EOS(x1) → EOS
Cond_334_0_add_Load(x1, x2, x3, x4, x5, x6, x7) → Cond_334_0_add_Load(x1, x6, x7)
Filtered duplicate args:
334_0_add_Load(x1, x2) → 334_0_add_Load(x2)
Cond_334_0_add_Load(x1, x2, x3) → Cond_334_0_add_Load(x1, x3)
Combined rules. Obtained 1 conditional rules for P and 0 conditional rules for R.
P rules:
334_0_add_Load(x3) → 334_0_add_Load(+(x3, 1)) | &&(>(x3, -1), <=(x3, 1000))
R rules:
Finished conversion. Obtained 2 rules for P and 0 rules for R. System has predefined symbols.
P rules:
334_0_ADD_LOAD(x3) → COND_334_0_ADD_LOAD(&&(>(x3, -1), <=(x3, 1000)), x3)
COND_334_0_ADD_LOAD(TRUE, x3) → 334_0_ADD_LOAD(+(x3, 1))
R rules:
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Boolean, Integer
(0) -> (1), if (x3[0] > -1 && x3[0] <= 1000 ∧x3[0] →* x3[1])
(1) -> (0), if (x3[1] + 1 →* x3[0])
(1) (&&(>(x3[0], -1), <=(x3[0], 1000))=TRUE∧x3[0]=x3[1] ⇒ 334_0_ADD_LOAD(x3[0])≥NonInfC∧334_0_ADD_LOAD(x3[0])≥COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(2) (>(x3[0], -1)=TRUE∧<=(x3[0], 1000)=TRUE ⇒ 334_0_ADD_LOAD(x3[0])≥NonInfC∧334_0_ADD_LOAD(x3[0])≥COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])∧(UIncreasing(COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥))
(3) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(4) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(5) (x3[0] ≥ 0∧[1000] + [-1]x3[0] ≥ 0 ⇒ (UIncreasing(COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])), ≥)∧[(-1)bni_10 + (-1)Bound*bni_10] + [(-1)bni_10]x3[0] ≥ 0∧[(-1)bso_11] ≥ 0)
(6) (COND_334_0_ADD_LOAD(TRUE, x3[1])≥NonInfC∧COND_334_0_ADD_LOAD(TRUE, x3[1])≥334_0_ADD_LOAD(+(x3[1], 1))∧(UIncreasing(334_0_ADD_LOAD(+(x3[1], 1))), ≥))
(7) ((UIncreasing(334_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(8) ((UIncreasing(334_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(9) ((UIncreasing(334_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧[1 + (-1)bso_13] ≥ 0)
(10) ((UIncreasing(334_0_ADD_LOAD(+(x3[1], 1))), ≥)∧[bni_12] = 0∧0 = 0∧[1 + (-1)bso_13] ≥ 0)
POL(TRUE) = 0
POL(FALSE) = 0
POL(334_0_ADD_LOAD(x1)) = [-1] + [-1]x1
POL(COND_334_0_ADD_LOAD(x1, x2)) = [-1] + [-1]x2
POL(&&(x1, x2)) = [-1]
POL(>(x1, x2)) = [-1]
POL(-1) = [-1]
POL(<=(x1, x2)) = [-1]
POL(1000) = [1000]
POL(+(x1, x2)) = x1 + x2
POL(1) = [1]
COND_334_0_ADD_LOAD(TRUE, x3[1]) → 334_0_ADD_LOAD(+(x3[1], 1))
334_0_ADD_LOAD(x3[0]) → COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])
334_0_ADD_LOAD(x3[0]) → COND_334_0_ADD_LOAD(&&(>(x3[0], -1), <=(x3[0], 1000)), x3[0])
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Boolean, Integer
!= | ~ | Neq: (Integer, Integer) -> Boolean |
* | ~ | Mul: (Integer, Integer) -> Integer |
>= | ~ | Ge: (Integer, Integer) -> Boolean |
-1 | ~ | UnaryMinus: (Integer) -> Integer |
| | ~ | Bwor: (Integer, Integer) -> Integer |
/ | ~ | Div: (Integer, Integer) -> Integer |
= | ~ | Eq: (Integer, Integer) -> Boolean |
~ | Bwxor: (Integer, Integer) -> Integer | |
|| | ~ | Lor: (Boolean, Boolean) -> Boolean |
! | ~ | Lnot: (Boolean) -> Boolean |
< | ~ | Lt: (Integer, Integer) -> Boolean |
- | ~ | Sub: (Integer, Integer) -> Integer |
<= | ~ | Le: (Integer, Integer) -> Boolean |
> | ~ | Gt: (Integer, Integer) -> Boolean |
~ | ~ | Bwnot: (Integer) -> Integer |
% | ~ | Mod: (Integer, Integer) -> Integer |
& | ~ | Bwand: (Integer, Integer) -> Integer |
+ | ~ | Add: (Integer, Integer) -> Integer |
&& | ~ | Land: (Boolean, Boolean) -> Boolean |
Integer